#include "mq_connection.hpp"

int main()
{
    //1. 实例化异步工作线程对象
    pprmq::AsyncWorker::ptr worker = std::make_shared<pprmq::AsyncWorker>();
    //2. 实例化连接对象
    pprmq::Connection::ptr conn = std::make_shared<pprmq::Connection>("127.0.0.1",8888,worker);
    //3. 通过连接创建信道
    pprmq::Channel::ptr channel = conn->openChannel();
    //4. 通过信道提供的服务完成所需
    google::protobuf::Map<std::string, std::string> tmp_map;
    //  1. 声明一个交换机exchange1, 交换机类型为广播模式
    channel->declareExchange("exchange1",pprmq::ExchangeType::TOPIC,true,false,tmp_map);
    //  2. 声明一个队列queue1
    channel->declareQueue("queue1",true,false,false,tmp_map);
    //  3. 声明一个队列queue2
    channel->declareQueue("queue2",true,false,false,tmp_map);
    //  4. 绑定queue1-exchange1，且binding_key设置为queue1
    channel->queueBind("exchange1","queue1","queue1");
    //  5. 绑定queue2-exchange1，且binding_key设置为news.music.#
    channel->queueBind("exchange1","queue2","news.music.#");

    //5. 循环向交换机发布消息
    for(int i = 0;i<10;i++)
    {
        pprmq::BasicProperties bp;
        bp.set_id(pprmq::UUIDHelper::uuid());
        bp.set_delivery(pprmq::DeliveryMode::DURABLE);
        bp.set_routing_key("news.music.pop");
        channel->basicPublish("exchange1",&bp,"Hello World-" + std::to_string(i));
    }

    pprmq::BasicProperties bp;
    bp.set_id(pprmq::UUIDHelper::uuid());
    bp.set_delivery(pprmq::DeliveryMode::DURABLE);
    bp.set_routing_key("news.music.country");
    channel->basicPublish("exchange1",&bp,"Hello ppr");

    bp.set_routing_key("news.sport.country");
    channel->basicPublish("exchange1",&bp,"Hello sport");

    std::cout<<"发布完成"<<std::endl;
    conn->closeChannel(channel);
    return 0;
}